home *** CD-ROM | disk | FTP | other *** search
/ Aminet 35 / Aminet 35 (2000)(Schatztruhe)[!][Feb 2000].iso / Aminet / game / shoot / ADescentSrc.lha / descent / main / args.c < prev    next >
C/C++ Source or Header  |  1998-11-09  |  4KB  |  175 lines

  1. /*
  2. THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
  3. SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
  4. END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
  5. ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
  6. IN USING, DISPLAYING,  AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
  7. SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
  8. FREE PURPOSES.  IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
  9. CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES.  THE END-USER UNDERSTANDS
  10. AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.  
  11. COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
  12. */
  13. /*
  14.  * $Source: /usr/CVS/descent/main/args.c,v $
  15.  * $Revision: 1.6 $
  16.  * $Author: nobody $
  17.  * $Date: 1998/11/09 22:20:31 $
  18.  * 
  19.  * Functions for accessing arguments.
  20.  * 
  21.  * $Log: args.c,v $
  22.  * Revision 1.6  1998/11/09 22:20:31  nobody
  23.  * *** empty log message ***
  24.  *
  25.  * Revision 1.5  1998/04/01 21:18:31  tfrieden
  26.  * Removed printing of program name from active switches
  27.  *
  28.  * Revision 1.4  1998/03/31 14:31:02  tfrieden
  29.  * Fixed bug with first argument
  30.  *
  31.  * Revision 1.3  1998/03/27 00:58:45  tfrieden
  32.  * NewIcon IM1/IM2 Tooltypes are ignored now
  33.  *
  34.  * Revision 1.2  1998/03/23 20:00:34  hfrieden
  35.  * Added workbench tooltypes support
  36.  *
  37.  * Revision 1.1.1.1  1998/03/03 15:12:11  nobody
  38.  * reimport after crash from backup
  39.  *
  40.  * Revision 1.1.1.1  1998/02/13  20:20:38  hfrieden
  41.  * Initial Import
  42.  */
  43.  
  44. #pragma off (unreferenced)
  45. static char rcsid[] = "$Id: args.c,v 1.6 1998/11/09 22:20:31 nobody Exp $";
  46. #pragma on (unreferenced)
  47.  
  48. #include <stdio.h>
  49. #include <stdlib.h>
  50. #include <string.h>
  51.  
  52. #include <exec/types.h>
  53. #include <workbench/workbench.h>
  54. #include <workbench/startup.h>
  55. #include <workbench/icon.h>
  56. #include <proto/exec.h>
  57. #include <proto/icon.h>
  58.  
  59. int Num_args=0;
  60. char * Args[100];
  61. char *progname = "ADescent";
  62.  
  63. extern void ShowInfoWindow(void);
  64. extern char *InfoTxt;
  65. extern struct DiskObject *IconFromWBArg(struct WBArg *);
  66.  
  67. struct Library *IconBase;
  68.  
  69.  
  70. int FindArg( char * s )
  71. {
  72.     int i;
  73.  
  74.     for (i=0; i<Num_args; i++ ) {
  75.         if (! stricmp( Args[i], s))
  76.             return i;
  77.     }
  78.  
  79.     return 0;
  80. }
  81.  
  82. void SplitArg(char *src, char *dest1, char *dest2)
  83. {
  84.     char *dest = dest1;
  85.     *dest1=0; *dest2=0;
  86.     while (*src) {
  87.         if (*src == '=') {
  88.             src++;
  89.             *dest=0;
  90.             dest=dest2;
  91.         }
  92.         *dest++ = *src++;
  93.     }
  94.     *dest=0;
  95. }
  96.  
  97.  
  98. void InitArgs( int argc,char **argv )
  99. {
  100.     int i;
  101.     struct DiskObject *dob;
  102.     struct WBStartup *wbs;
  103.     char **toolarray, *tool;
  104.     int j;
  105.     char opt[50], arg[50];
  106.     int noicon = 0;
  107.  
  108.     Num_args=0;
  109.  
  110.     if (argc == 0) {
  111.         ShowInfoWindow();
  112.     }
  113.     else printf("%s\n", InfoTxt);
  114.  
  115.     if (argc >0) {
  116.         for (i=0; i<argc; i++ ) {
  117.             Args[Num_args++] = strdup( argv[i] );
  118.         }
  119.     }
  120.  
  121.     if (argc >= 2) {
  122.         noicon = (stricmp(argv[1], "-noicon") == 0);
  123.     }
  124.  
  125.     if (!noicon) {
  126.         Args[Num_args++] = progname;
  127.         IconBase = OpenLibrary("icon.library", 0L);
  128.         if (IconBase) {
  129.             if (argc != 0) dob = GetDiskObjectNew(argv[0]);
  130.             else {
  131.                 wbs = (struct WBStartup *)argv;
  132.                 dob = IconFromWBArg(wbs->sm_ArgList);
  133.             }
  134.             if (dob) {
  135.                 toolarray = (char **)dob->do_ToolTypes;
  136.                 j=0; tool = toolarray[j];
  137.                 while (tool) {
  138.                     if (*tool != '*' && *tool != '(' && *tool != '<' &&
  139.                       strnicmp(tool, "IM1", 3) != 0 && strnicmp(tool, "IM2", 3) != 0) {
  140.                         SplitArg(tool, opt, arg);
  141.                         Args[Num_args] = malloc(strlen(opt)+3);
  142.                         strcpy(Args[Num_args], "-");
  143.                         strcat(Args[Num_args], opt);
  144.                         Num_args++;
  145.                         if (*arg!='\0') {
  146.                             Args[Num_args++] = strdup(arg);
  147.                         }
  148.                     }
  149.                     j++;
  150.                     tool=toolarray[j];
  151.                 }
  152.             }
  153.             FreeDiskObject(dob);
  154.             CloseLibrary(IconBase);
  155.         }
  156.     } else printf("Ignoring icon settings\n");
  157.  
  158.     for (i=0; i< Num_args; i++ )    {
  159.         if ( Args[i][0] == '/' )  
  160.             Args[i][0] = '-';
  161.  
  162.         if ( Args[i][0] == '-' )
  163.             strlwr( Args[i]  );     // Convert all args to lowercase
  164.  
  165.         //printf( "Args[%d] = '%s'\n", i, Args[i] );
  166.     }
  167.  
  168.     printf("Options in effect:\n");
  169.     for (i=1; i<Num_args; i++) {
  170.         if (stricmp(Args[i],argv[0]) != 0 && stricmp(Args[i], "ADescent") != 0)
  171.             printf("%s ", Args[i]);
  172.     }
  173.     printf("\n");
  174. }
  175.